package tp.pr2.mv;

public class OperandStack {
	private int size = 10;
	private int contador;
	private int[] pila;
	
	public OperandStack() {
		this.pila = new int[size];
		this.contador=0;
	}
	
	private void resize() {
		if (pilaLlena()) {
			int tamanio = 2;
			this.size = this.size*tamanio; // Aumenta el tamaño en múltiplos de diez.
			int [] pilaaux = pila;
			this.pila = new int[this.size];
			for (int i = 0; i < this.contador; i++)
				this.pila[i] = pilaaux[i];
			tamanio++;
		}
	}
	
	public boolean pilaLlena() {
		boolean llena = false;
		if (this.contador == size)
			llena = true;
		return llena;
	}
	
	public boolean pilaVacia() 	{
		boolean empty=false;
		if(this.contador==0)
			empty=true;
		return empty;
	}
	
	public void push(int n) {
		if (pilaLlena()) resize();
		this.pila[this.contador]=n;
		this.contador++;
	}
	
	public void pop() {
		this.contador--;
	}
	
	public int getContador() {
		return this.contador;
	}
	
	public int getCima() {
		return this.pila[this.contador-1];
	}

	@Override
	public String toString() {
		String cadenapila = "";
		int j=0;
		if(j<this.contador){
			for (int i=0; i < this.contador; i++)
				cadenapila = cadenapila + pila[i] + " ";
		}else
			cadenapila="<vacia>";
		return cadenapila;
	}

}
